[C] Qsort - Ordenação
Publicado por Enzo de Brito Ferber (última atualização em 09/10/2010)
[ Hits: 6.274 ]
Homepage: http://www.maximasonorizacao.com.br
Programa simples para mostrar uma das funções de ordenação da biblioteca padrão. Bem legalzinho, bom pra não perder tempo escrevendo sua própria função se você pode usar algo mais generalizado.
/* qsort.c */ /* Enzo Ferber : <enzo@veloxmail.com.br> * * Quick Sort Routine Example * sep 2010 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /* compare function for quick sort */ int compare ( const void *va, const void *vb ) { int *a = (int *) va; int *b = (int *) vb; return (*a > *b) ? 1 : ( *a == *b ) ? 0 : -1 ; } int *buildarray ( void ) { /* information */ int *p, i = 1, n; p = ( int * ) malloc ( 2 * sizeof ( int )); if ( !p ) { perror ( "[*] malloc" ); return NULL; } while ( 1 ) { printf ( "Value[%3d]: ", i ); __fpurge ( stdin ); scanf ( "%d", &n ); /* first element will be the number of elements on the array * this will be used by qsort() */ if ( n < 0 ) { /* first element */ *p = i - 1; return p; } else *(p + i) = n; /* alloc memory for the next item */ p = ( int * ) realloc ( p, (i + 2) * sizeof(int)); if ( !p ) { perror ( "[*] realloc" ); return NULL; } /* increment */ ++i; } return p; } int main ( void ) { int *a = buildarray(); int *p, n, i; n = *(a + 0); p = a + 1; /* Explanation: * * 'a' after buildarray return is: * * 'a'pos: 0 1 2 3 n * [number_of_elements][data][data1][data2][dataN].... * * Value: n x x x x * * So, 'n' is the number of elements in the array, and 'x' * is the data entered by the user. Pretty easy huh? * * So now, we do: * * p = a[1] * n = a[0] * Therefore, * * p[0] = a[1]; * n = n; (local_n) = (n_in_number_of_elements) * * P now is an array with only data entered by the user */ /* now we organize the array in ascending order */ printf ( "Sorting...\n" ); qsort ( (void *)p, n, sizeof(int), compare ); printf ( "Array: " ); for ( i = 0; i < n; i++ ) printf ( "%d ", p[i] ); printf ( "\n" ); /* free() the memory */ free ( a ); /* return to SO */ return 0; }
Controle de tráfego aéreo - filas dinâmicas
Raiz cúbica pelo método de bissecção
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Quero saber sobre os melhores aplicativos de office para usar em 2024 ... (2)
Queria saber se existe alguma forma de desistalar programa no ubuntu s... (3)
Toda vez que tento atualizar o clamav me deparo com erros ao atualizar... (0)